package com.tedu.api;

import org.junit.Test;

/**API
 * String 字符串类  不可改变   BUG
 * 假设:10000000个String类---内存
 * 操作系统发现内存越来越小，会在硬盘上开辟空间--软件卡
 * 建议：存储字符串常用类似---String
 *
 * 可变字符串
 * StringBuilder类  创建字符串随时进行改变【修改、增加、插入】
 * String不可改变的类，频繁创建对象，带来内存损耗
 * StringBuilder类解决内存损耗
 * 创建方式:StringBuilder sb=new StringBuilder();
 *
 * C语言      好处：创建对象，顺便销毁对象
 *          例如：定义变量  int  a=malloc(4);  开辟4个字节空间
 *                      a=1;
 *                      free(a);    清理内存
 * Java语言      好处：创建完对象，不用管，等GC垃圾回收机制，进行回收
 *             例如：定义变量 int a=1; 开辟空间,交给GC【使用方便】
 */
public class StringBuilderAPI {
/**java.long  包下
 * StringBuilder可变的字符串对象类
 * 什么情况下使用：有大量字符串拼接，建议StringBuilder
 * String str="123"     String s="456"  str+s出现新对象
 * append() 方法：拼接，等同于String加号的意思
 */
@Test
    public void testStringBuilderAPI(){
String str="你干嘛哈哈哎呦！";
//创建一个空的字符串，接收传入字符串【原有字符串上大量拼接】
StringBuilder sb=new StringBuilder(str);//不会产生新对象
sb.append("哎呀，哈哈amage~~");
    System.out.println("原来的对象："+sb);
}
/**
 * StringBuilder可变的字符串
 * replace(开始坐标，结束坐标)  替换  含头不含尾
 * 作用:可以将字符串中指定范围的内存替换成给定字符串
 *
 */
@Test
    public void testReplace(){
    StringBuilder sb=new StringBuilder("等下战神，等下战神呀！123");
    sb=sb.replace(11,14,"极限啦！");
    System.out.println("耀阳："+sb);
}
/**
 * StringBuilder与StringBuffer---可变字符串类【用法完全一致】
 * append方法，replace方法，insert方法通用
 * insert()方法
 * 作用:将给定字符串插入到当前字符串中
 */
@Test
    public void testInsert(){
    StringBuffer sb=new StringBuffer("嗷嗷，雪豹闭嘴");
    sb=sb.insert(0,"在山里，我们能听到各种动物的叫声.");
    System.out.println("丁真："+sb);
}






}
